package com.nextel.project.pedido.rms;

import com.nextel.project.Configuracion;
import com.nextel.project.pedido.bean.ArticuloPorCodigoBean;
import pe.com.nextel.rms.GestorRMS;
import pe.com.nextel.rms.Persistente;
import java.util.Stack;
import pe.com.nextel.util.ArrayList;
import pe.com.nextel.util.Arrays;
import pe.com.nextel.util.List;

/**
 *
 * @author eespinoza
 */
public class RMSArticuloPorCodigo extends GestorRMS {

    private ArticuloPorCodigoBean bean = new ArticuloPorCodigoBean();

    public RMSArticuloPorCodigo() {
        super("INDXCODARTICULO");

    }

    protected Persistente createObjectBean() {
        return bean;
    }

//    public void grabarArticuloPorCodigo(Stack objectStack) throws Exception {
//        try {
//            abrirRS();
//
//            Object obj;
//            ArticuloPorCodigoBean beanTemp;
//            int i = 0;
//            List lista = new ArrayList();
//            //mientras haya datos en la pila
//            while ((obj = objectStack.pop()) != null) {
//
//                beanTemp = (ArticuloPorCodigoBean) obj;
//                if (i % 50 == 0 && !lista.isEmpty()) {
//                    guardar(lista);
//                    lista.clear();
//                    System.gc();
//                }
//                lista.add(beanTemp);
//                i++;
//            }
//
//            if (!lista.isEmpty()) {
//                guardar(lista);
//                lista.clear();
//                System.gc();
//            }
//
//            lista = null;
//
//        } finally {
//
//            cerrarRS();
//        }
//    }

    public ArticuloPorCodigoBean buscarArticulo(String codigo) throws Exception {
    //    System.out.println("rms.buscarArticulo");

        try {
            abrirRS();
            
            long time1 = System.currentTimeMillis();
            
            ArticuloPorCodigoBean articuloReturn = null;

            ArticuloPorCodigoBean articulo = new ArticuloPorCodigoBean();
            articulo.setCodigoArticulo(codigo);
  
            int tamanio = getNumRecords();
      //      System.out.println("tamanio=" + tamanio);

      //       long time2 = System.currentTimeMillis();
      //       System.out.println("time1=" + (time2 - time1) );
            
            int inicio = 1;
            int fin = tamanio;
            int pos;
            boolean flag = false;
            List lista = null;
            int i = 0;

            while (inicio <= fin) {
                pos = (inicio + fin) / 2;

       //         long time3 = System.currentTimeMillis();
                lista = getRecordList(pos);
       //         long time31 = System.currentTimeMillis();
       //         System.out.println("time[pos31]=" + (time31 - time3) );
                
                i = Arrays.esMayorMenor(lista, articulo);
      //          System.out.println("i=" + i);
                if (i >= 0) {
                    flag = true;
                    break;
                } else if (i == -2) { //es menor

                    inicio = pos + 1;
                } else if (i == -1) { // es mayor

                    fin = pos - 1;
                }
                
      //          long time32 = System.currentTimeMillis();
      //          System.out.println("time[pos32]=" + (time32 - time31) );
            }

       //     long time4 = System.currentTimeMillis();
           

            if (flag) {
                articuloReturn = (ArticuloPorCodigoBean) lista.get(i);
       //         System.out.println("encontrado");
            }
                
       //     long time5 = System.currentTimeMillis();
       //     System.out.println("time5=" + (time5- time4) );


            if (lista != null) {
                lista.clear();
                lista = null;
            }
            System.gc();

       //     System.out.println("fin de la busqueda");

            return articuloReturn;



        } finally {
            cerrarRS();
        }
    }
}
